"""
https://leetcode.cn/problems/rotate-image/description/

48. 旋转图像
已解答
中等
相关标签
相关企业
给定一个 n × n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。

你必须在 原地 旋转图像，这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。

 

示例 1：


输入：matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出：[[7,4,1],[8,5,2],[9,6,3]]
示例 2：


输入：matrix = [[5,1,9,11],[2,4,8,10],[13,3,6,7],[15,14,12,16]]
输出：[[15,13,2,5],[14,3,4,1],[12,6,8,9],[16,7,10,11]]
 

提示：

n == matrix.length == matrix[i].length
1 <= n <= 20
-1000 <= matrix[i][j] <= 1000

"""

from typing import List


class Solution:
    def rotate(self, matrix: List[List[int]]) -> None:
        """
        Do not return anything, modify matrix in-place instead.
        核心有两个:
        1. 找到新旧坐标的映射关系
        2. 配置中间缓存空间保存数据
        """

        n=len(matrix)
        nrc=lambda row,col:(col,n-1-row)
        
        # 创建空数组
        new_mat=[[None for _ in range(n)] for _ in range(n)]
        for row in range(n):
            for col in range(n):
                (nr,nc)=nrc(row,col)
                # print(f'{row},{col} to {nr},{nc} val:{matrix[row][col]}')
                new_mat[nr][nc]=matrix[row][col]
        for row in range(n):
            for col in range(n):
                matrix[row][col]=new_mat[row][col]



if __name__=='__main__':
    sol=Solution()
    mat=[[1,2,3],[4,5,6],[7,8,9]]
    sol.rotate(mat)
    print(mat)
    pass